home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / dev / e / 2b_CrtvE_src.lha / internal2.s < prev    next >
Text File  |  2001-01-29  |  14KB  |  668 lines

  1. ;;INIT
  2.  
  3. INITALL:
  4.     MOVE.W  #6,CURSPOT
  5.     MOVE.L  D0,ARGLEN       ; SAVE THESE 1ST
  6.     MOVE.L  A0,ARGADR
  7.     MOVE.L  4.W,A6
  8.     MOVE.W  20(A6),KICKVERS
  9.  
  10.     LEA UTILNAME,A1
  11.     MOVEQ   #0,D0
  12.     JSR -552(A6)
  13.     MOVe.L  D0,UTILBASE
  14.  
  15.     LEA INITDOS,A1
  16.     MOVEQ   #0,D0
  17.     JSR -552(A6)        ; OPEN DOS
  18.     MOVE.L  D0,DOSBASE
  19.     BEQ LEAVEFAST
  20.  
  21.     MOVE.L  D0,A6
  22.     JSR -60(A6)         ; GET STDIO
  23.     MOVE.L  D0,STOUT
  24.     TST.L   D0
  25.     BEQ NOSTDOUT
  26.  
  27. ;   here start with cl-arg-parse
  28.     BSR   INITOTHER
  29.  
  30. .NUFF:
  31.     CMP.W   #37,KICKVERS
  32.     BPL READARGS
  33.  
  34.     MOVE.L  ARGLEN(PC),D0
  35.     MOVE.L  ARGADR(PC),A0
  36.  
  37.     CLR.W   MAXREGALLOC
  38.     MOVE.L  CODEPREFS(PC),D5
  39.     CMP.B   #'-',(A0)
  40.     BNE .1
  41.     SUBQ.L  #1,D0
  42.     ADDQ.L  #1,A0
  43.     MOVEQ   #0,D2
  44. .2: MOVE.B  (A0)+,D2
  45.     SUBQ.L  #1,D0
  46.     CMP.W   #33,D2
  47.     BMI .1
  48.     CMP.W   #127,D2
  49.     BPL .1
  50.     LEA .OPTS(PC),A2
  51. .XL:MOVE.B  (A2)+,D3
  52.     BEQ iERROR10
  53.     MOVE.B  (A2)+,D4
  54.     CMP.B   D2,D3
  55.     BNE.S   .XL
  56.     BSET    D4,D5
  57.     CMP.B   #"m",D3
  58.     BEQ.S   .M
  59.     CMP.B   #"r",D3
  60.     BEQ.S   .R
  61.     BRA.S   .2
  62. .M: MOVE.B  (A0)+,D2
  63.     SUBQ.L  #1,D0
  64.     CMP.B   #"9"+1,D2
  65.     BPL iERROR10
  66.     CMP.B   #"1",D2
  67.     BMI iERROR10
  68.     SUB.B   #"0",D2
  69.     EXT.W   D2
  70.     EXT.L   D2
  71.     MULU    #400,D2         ; SEE READARGS
  72.     LSL.L   #8,D2
  73.     ADD.L   D2,BUFADD
  74.     BRA.S   .2
  75. .R: MOVE.B  (A0),D2
  76.     CMP.B   #"0"+1+MAXREGVARS,D2    ; PUT 1..5 VARS IN REGS
  77.     BPL.S   .NR
  78.     CMP.B   #"1",D2
  79.     BMI.S   .NR
  80.     SUBQ.L  #1,D0
  81.     ADDQ.L  #1,A0
  82.     SUB.B   #"0",D2
  83.     EXT.W   D2
  84. .SR:    MOVE.W  D2,MAXREGALLOC
  85.     BRA.S   .2
  86. .NR:    MOVEQ   #MAXREGVARS,D2
  87.     BRA.S   .SR
  88. .OPTS:  DC.B    'a',3,'n',4,'w',6,'b',9,'m',10,'l',2,'s',13
  89.     DC.B    'e',11,'E',5,'r',7,'q',15,'c',17,'h',18,'L',21,0
  90.     EVEN
  91. .1: MOVE.L  D5,CODEPREFS
  92.     MOVE.L  #NAMEBUF,A1     ; COPY ARGS
  93.     CMP.L   #2,D0
  94.     BMI iERROR18         ; NOSTDOUT
  95.     SUBQ.L  #1,D0
  96.     MOVE.L  D0,ARGLEN
  97.     MOVE.L  A0,ARGADR
  98.     SUBQ.L  #1,D0
  99.     MOVEQ   #0,D2
  100. COPYARGS:
  101.     MOVE.B  (A0)+,D2
  102.     CMP.W   #33,D2
  103.     BPL.S   .1
  104.     SUBQ.L  #1,ARGLEN
  105.     BRA.S   .2
  106. .1: MOVE.B  D2,(A1)+
  107. .2: DBRA    D0,COPYARGS
  108.  
  109. INITOTHER:
  110.     MOVEM.L D0-A6,-(A7)
  111.     LEA MIDAT(PC),A1
  112.     MOVEQ   #0,d1
  113. .1: MOVE.B  (A1),D0
  114.     BEQ .2
  115.     ADDQ.L  #1,D1
  116.     eori.b  #$45,d0
  117.     move.b  d0,(a1)+
  118.     bra .1
  119. .2: move.l  d1,MIDAT-4
  120.     lea MIDAT2(PC),A1
  121.     moveq   #0,d0
  122.     moveq   #0,d2
  123.     move.l  ARGADR,A0
  124. .3: move.b  (a0)+,d0
  125.     tst.b   d0
  126.     beq     .4
  127.     cmp.b   #10,d0
  128.     beq     .4
  129.     addq.l  #1,d2
  130.     eori.b  #$45,d0
  131.     cmp.b   (a1)+,d0
  132.     bne     .5
  133.     bra .3
  134. .4:
  135.     cmp.l   #16,d2
  136.     bne .5
  137.     MOve.l  #MIDAT,d2
  138.     exg.l   d1,d3
  139.     JSR WRITECON
  140.     JSR CLEANUPALL
  141.     MOVE.L  INITSTACK,A7
  142.     rts
  143. .5:
  144.     MOVEM.L (A7)+,D0-A6
  145.     RTS
  146.  
  147.  
  148.     DC.L    0
  149. MIDAT:
  150.     DC.B    'Oeeeeeeeeeeeee!f',$15,'e!f',$15,'eeeOe',$4,$28,$2c,'"$ee'
  151.     DC.B    'eeee!f',$15,'e!f',$15,'eeeeOeeeeeeeeeee!f',$15,'e!f'
  152.     DC.B    $15,"eeeeeOeeóf'eóf'e!f",$15,'e!f',$15,"eeeeeeOeeeóf'"
  153.     DC.B    "eóf'e",$15,'e!f',$15,"eeeeeeeOeeeeóf'eóf'e!f",$15,'eeeeeeeeO'
  154.     DC.B    "eeeeeóf'eófff",$15,'e',$3,'*7 3 7eOeeeeeeóf',"'",'eóf',$15
  155.     DC.B    "eeeeeeeeeeOeeeeeeeeeeeeee 77j')$÷eOO",0
  156.         EVEN
  157. MIDAT2:
  158.     DC.L    $0c622865,$3c2a3037,$65082436,$31203764,0
  159.  
  160. ; HERE ARGADR IS OK, AND ARGLEN=PRECISELEN, A1=ENDOFSTR
  161. BACKRA:
  162.  
  163.     CMP.B   #"e",-1(A1)
  164.     BEQ.S   .4
  165.     CMP.B   #"E",-1(A1)
  166.     BNE.S   .3
  167. .4: CMP.B   #".",-2(A1)
  168.     BNE.S   .3
  169.     MOVE.L  ARGLEN(PC),D2
  170.     SUBQ.L  #2,D2
  171.     BMI.S   .3
  172.     MOVE.L  D2,ARGLEN
  173.     SUBQ.L  #2,A1
  174.  
  175. .3: MOVE.B  #0,(A1)+
  176.     MOVE.W  #0,CONOUT
  177.     BSR.W   SHOWIDENT
  178.     BRA.S   GOTOUT
  179. NOSTDOUT:             ; WE'VE GOT NO STDIO
  180.         MOVEQ   #0,D0
  181.         MOVE.L  D0,ARGLEN       ; SIMULATE NO ARGS
  182.         SWAP    D0
  183.         MOVE.B  D0,NAMEBUF
  184.     BSR OPENCON         ; WE NEED A CON: AS STDIO
  185.     BSR.S   SHOWIDENT
  186.     MOVE.W  #-1,CONOUT
  187.     BSET    #2,CODEPREFS+1
  188. GOTOUT:               ; WE GOT STDIO, SO START PRINTING
  189.     BSR TOFRONT         ; PUT WBTOFRONT
  190.     BSR INSTALLHANDLER
  191.     MOVE.W  CONOUT(PC),D0
  192.     CMP.W   #0,D0
  193.     BNE.S   ERNOARGS
  194.     BSR OPENFILE
  195.     RTS
  196. ERNOARGS:
  197.     RTS
  198.  
  199. SHOWIDENT:
  200.     TST.W   .2
  201.     BNE.S   .1
  202.     BTST    #7,CODEPREFS+2
  203.     BNE.S   .1
  204.     MOVE.L  #TITLE,D2
  205.     MOVE.L  #TITLEEND-TITLE,D3
  206.     BSR WRITECON        ; SHOW OUR REAL IDENTITY
  207.     MOVE.W  #-1,.2
  208. .1: RTS
  209. .2: DC.W    0
  210.  
  211. ISOPENMATH:
  212.     TST.L   MATHBASE
  213.     BNE.S   .1
  214.     ;MOVEM.L    D0-D1/A0-A1,-(A7)
  215.     LEA INITMATH,A1
  216.     MOVEQ   #0,D0
  217.     MOVE.L  4.W,A6
  218.     JSR -552(A6)        ; OPEN MATH
  219.     MOVE.L  D0,MATHBASE
  220.     ;MOVEM.L    (A7)+,D0-D1/A0-A1
  221.     TST.L   MATHBASE
  222.     BEQ iERROR58
  223. .1: RTS
  224.  
  225. READARGS:
  226.     MOVE.L  DOSBASE,A6
  227.     MOVE.L  #TEMPLATE,D1
  228.     MOVE.L  #.SRC,D2
  229.     MOVEQ   #0,D3
  230.     JSR -$31E(A6)       ; READARGS
  231.     MOVE.L  D0,D7           ; D7=RASTRUCT
  232.     move.l  D0,DOS_RDA
  233.     BEQ iERROR18
  234.  
  235.     MOVE.L  #NAMEBUF,A1     ; COPY ARGS
  236.     MOVE.L  .SRC(PC),A0
  237.     MOVE.L  A1,ARGADR
  238.     MOVE.L  A1,D0
  239. .COPY:  MOVE.B  (A0)+,(A1)+
  240.     BNE.S   .COPY
  241.     SUBQ.L  #1,A1
  242.     MOVE.L  A1,D5           ; D5=END
  243.     SUB.L   A1,D0
  244.     NEG.L   D0
  245.     MOVE.L  D0,ARGLEN
  246.  
  247.     MOVE.L  CODEPREFS,D6        ; D6=CODEPREFS
  248.     MOVE.L  .REG(PC),D0
  249.     BEQ.S   .1
  250.     MOVE.L  D0,A0
  251.     MOVE.L  (A0),D0
  252.     TST.L   D0
  253.     BMI.S   .D
  254.     CMP.L   #MAXREGVARS+1,D0
  255.     BMI.S   .O
  256. .D: MOVEQ   #MAXREGVARS,D0
  257. .O: MOVE.W  D0,MAXREGALLOC
  258. .1: TST.L   .LARGE
  259.     BEQ.S   .2
  260.     BSET    #2,D6
  261. .2: TST.L   .SYM
  262.     BEQ.S   .3
  263.     BSET    #13,D6
  264. .3: TST.L   .NOWRN
  265.     BEQ.S   .4
  266.     BSET    #4,D6
  267. .4: TST.L   .QUIET
  268.     BEQ.S   .5
  269.     BSET    #15,D6
  270. .5: TST.L   .ASM
  271.     BEQ.S   .6
  272.     BSET    #3,D6
  273. .6: TST.L   .ERRL
  274.     BEQ.S   .7
  275.     BSET    #11,D6
  276. .7: TST.L   .ERRB
  277.     BEQ.S   .8
  278.     BSET    #5,D6
  279. .8: TST.L   .SBUF
  280.     BEQ.S   .9
  281.     BSET    #9,D6
  282. .9: TST.L   .ICA
  283.     BEQ.S   .10
  284.     BSET    #17,D6
  285. .10:    TST.L   .HOLD
  286.     BEQ.S   .11
  287.     BSET    #18,D6
  288. .11:    TST.L   .WB
  289.     BEQ.S   .11B
  290.     BSET    #6,D6
  291. .11B:   TST.L   .LINED
  292.     BEQ.S   .11BB
  293.     BSET    #21,D6
  294. .11BB:  TST.L   .NIL
  295.     BEQ.S   .11C
  296.     BSET    #1,D6
  297. .11C:   TST.L   .DBG
  298.     BEQ.S   .11D
  299.     BSET    #22,D6
  300.     BSET    #21,D6
  301. .11D:
  302.     TST.L   .OPTI
  303.     BEQ.S   .12
  304.     MOVE.W  #MAXREGVARS,MAXREGALLOC
  305.     BSET    #5,ICODEPREFS+3
  306. .12:    MOVE.L  .ABUF(PC),D0
  307.     BEQ.S   .13
  308.     MOVE.L  D0,A0
  309.     MOVE.L  (A0),D0
  310.     CMP.L   #1,D0
  311.     BMI.S   .13
  312.     CMP.L   #1001,D0
  313.     BPL.S   .13
  314.     MULU    #400,D0         ; SEE PARSE "-"
  315.     LSL.L   #8,D0
  316.     ADD.L   D0,BUFADD
  317. .13:
  318.     MOVE.L  D6,CODEPREFS
  319.  
  320.     MOVE.L  D7,D1
  321. ;    JSR -$35A(A6)
  322.     MOVE.L  D5,A1
  323.     BRA BACKRA
  324.  
  325. .SRC:   DC.L    0
  326. .REG:   DC.L    0
  327. .LARGE: DC.L    0
  328. .SYM:   DC.L    0
  329. .NOWRN: DC.L    0
  330. .QUIET: DC.L    0
  331. .ASM:   DC.L    0
  332. .ERRL:  DC.L    0
  333. .ERRB:  DC.L    0
  334. .SBUF:  DC.L    0
  335. .ABUF:  DC.L    0
  336. .ICA:   DC.L    0
  337. .HOLD:  DC.L    0
  338. .WB:    DC.L    0
  339. .LINED: DC.L    0
  340. .OPTI:  DC.L    0
  341. .DBG:   DC.L    0
  342. .NIL:   DC.L    0
  343. MCRS:   DC.L    0
  344.  
  345.  
  346. DOS_RDA:DC.L    0
  347. DOARGMACROS:
  348.     movem.l d0-a6,-(a7)
  349.     move.l  MCRS,D0
  350.     beq     .11EX
  351.     move.l  d0,a0
  352.     PREPTA  A6
  353. .11LP1:
  354.     move.l  (a0)+,d0
  355.     beq     .11EX
  356.  
  357. ;    movem.l d0-a6,-(a7)
  358. ;    move.l  d0,a0
  359. ;.xxx:
  360. ;    tst.b   (a0)+
  361. ;    bne     .xxx
  362. ;    move.l  a0,d3
  363. ;    sub.l   d0,d3
  364. ;    move.l  d0,d2
  365. ;    jsr     WRITECON
  366. ;    move.l  #CLINE,d2
  367. ;    moveq   #2,d3
  368. ;    jsr     WRITECON
  369. ;    movem.l (a7)+,d0-a6
  370.  
  371.     moveq   #0,d1
  372.     move.l  d0,a1
  373.     GETM    a5
  374.     move.l  a5,a4
  375.     moveq   #0,d0
  376.     move.b  (a1)+,d0
  377.     PREPID  a6,d0
  378.     bmi     iERROR64
  379. .11LP2:
  380.     HASHC   D1,D0
  381.     MOVE.B  D0,(A5)+
  382.     MOVE.B  (A1)+,D0
  383.     PREPIDR A6,D0
  384.     BPL.S   .11LP2
  385.  
  386.     CLR.B   (A5)+
  387.     MOVE.L  A5,D0
  388.     BTST    #0,D0
  389.     BEQ.S   .11E2
  390.     CLR.B   (A5)+
  391. .11E2:
  392.     HASHE   D1
  393.     LSL.L   #2,D1
  394.     ADD.L   #MACROHASH,D1
  395.     MOVE.L  D1,A6
  396.     MOVE.L  (A6),(A5)       ; MAC_NEXT
  397.     MOVE.L  A5,(A6)
  398.     MOVE.L  A5,A6           ; A6=MACOBJ
  399.     ADDQ.L  #4,A5
  400.     MOVE.L  A4,(A5)+        ; MAC_NAME
  401.     CLR.L   (A5)+           ; MAC_BODY
  402.     CLR.L   (A5)+           ; MAC_NARGS + MAC_FLAGS
  403.     DONEH   A5
  404.     bra     .11LP1
  405. .11EX:
  406.     movem.l (a7)+,d0-a6
  407.     rts
  408.  
  409. TEMPLATE:   DC.B    'SOURCE/A,REG=NUMREGALLOC/N/K,LARGE/S,'
  410.             DC.B    'SYM=SYMBOLHUNK/S,NOWARN/S,'
  411.             DC.B    'QUIET/S,ASM/S,ERRLINE/S,ERRBYTE/S,'
  412.             DC.B    'SHOWBUF/S,ADDBUF/N/K,IGNORECACHE/S,'
  413.             DC.B    'HOLD/S,WB/S,LINEDEBUG/S,OPTI/S,'
  414.             DC.B    'DEBUG/S,NILCHECK/S,DEFINE/M',0
  415.             EVEN
  416. KICKVERS:   DC.W    0
  417. ARGLEN:     DC.L    0   ; =0 IF NO ARGS
  418. ARGADR:     DC.L    0
  419. HANDLE:     DC.L    0
  420. LINEWRITE:  DC.W    0
  421. DOSBASE:    DC.L    0
  422. UTILBASE:   DC.L    0
  423. MATHBASE:   DC.L    0
  424. KILLFLAG:   DC.W    0   ; IF -1 THEN KILL EXE
  425. STOUT:      DC.L    0
  426. CONOUT:     DC.W    0   ; FLAG: true->STDOUT=CON:,asmone
  427. CDLOCK:     DC.L    0
  428. GOTLOCK:    DC.W    0
  429. RETERROR:   DC.W    -1
  430. ASSLINE:    DC.W    0   ; LINENUM OF LAST A=1
  431. ERARGS:     DC.L    0,0,0,0,0
  432. RETURNOUT:  DC.B    10
  433. ERTEXT:     DC.B    'ERROR: '
  434. ERTEXTEND:
  435. ERLINE:     DC.B    'LINE %ld: %s',10,0
  436. EROBJLINE:  DC.B    'WITH: %s',10,0
  437.       DC.B    '$VER: '
  438. TITLE:  CREATIVE_VERSION
  439. TITLEEND:   DC.B    0
  440.       EVEN
  441. ;; split name
  442. SPLITNAME:
  443.     MOVE.L  #NAMEBUF,A0
  444.     MOVE.L  A0,A1       ; A1=BEGBUF
  445.     LOWER   A0,D0
  446. .XL:CMPA.L  A0,A1
  447.     BEQ.S   .D
  448.     MOVEQ   #0,D0
  449.     MOVE.B  -(A0),D0
  450.     CMP.W   #":",D0
  451.     BEQ.S   .DM
  452.     CMP.W   #"/",D0
  453.     BEQ.S   .DM
  454.     BRA.S   .XL
  455. .DM:    ADDQ.L  #1,A0       ; A0=MIDBUF
  456. .D: MOVE.L  #SRCDIRBUF,A2   ; A2=DIRBUF
  457.     MOVE.L  A2,A4
  458.     MOVE.L  A1,A3
  459. .L1:    CMPA.L  A3,A0
  460.     BEQ.S   .E1
  461.     MOVE.B  (A3)+,(A4)+
  462.     BRA.S   .L1
  463. .E1:    CLR.B   (A4)+
  464.     MOVE.L  A0,A3
  465.     MOVE.L  A1,A4
  466. .L2:    MOVE.B  (A3)+,(A4)+
  467.     BNE.S   .L2
  468.     MOVE.L  ARGLEN(PC),D0
  469.     ADD.L   A1,D0
  470.     SUB.L   A0,D0
  471.     MOVE.L  D0,ARGLEN
  472.     TST.B   (A2)
  473.     BEQ.S   .1
  474.     MOVE.L  DOSBASE(PC),A6
  475.     MOVE.L  A2,D1
  476.     MOVEQ   #-2,D2
  477.     JSR -$54(A6)    ; LOCK
  478.     BEQ.S   .1
  479.     MOVE.L  #FIB,A2
  480.     MOVE.L  A2,D2
  481.     MOVE.L  D0,D1
  482.     MOVE.L  D0,D3
  483.     JSR -$66(A6)
  484.     TST.L   4(A2)       ; IS IT A DIR?
  485.     BMI.S   .2
  486.     MOVE.L  D3,D1
  487.     JSR -$7E(A6)    ; CURRENTDIR
  488.     MOVE.L  D0,CDLOCK
  489.     MOVE.W  #-1,GOTLOCK
  490. .1: RTS
  491. .2: MOVE.L  D3,D1
  492.     JSR -$5A(A6)    ; UNLOCK
  493.     RTS
  494. ;*-*
  495. ;; close lock
  496. CLOSELOCK:
  497.     TST.W   GOTLOCK
  498.     BEQ.S   .1
  499.     MOVE.L  DOSBASE(PC),A6
  500.     MOVE.L  CDLOCK(PC),D1
  501.     JSR -$7E(A6)    ; CURRENTDIR
  502.     MOVE.L  D0,D1
  503.     JSR -$5A(A6)    ; UNLOCK
  504. .1: RTS
  505. ;*-*
  506. ;; open file
  507. OPENFILE:
  508.     BSR SPLITNAME
  509.     MOVE.W  #7,CURSPOT
  510.     MOVE.L  #NAMEBUF,A2     ; FIX '.E'
  511.     ADD.L   ARGLEN(PC),A2       ; A2=MIDARG
  512.     MOVE.B  #'.',(A2)
  513.     MOVE.B  #'e',1(A2)
  514.     MOVE.B  #0,2(A2)
  515.     MOVE.L  #NAMEBUF,D0
  516.     BSR.W   FILELENGTH      ; GET FILELENGTH
  517.     CMP.L   #1,D0
  518.     BMI iERROR16
  519.     MOVE.L  D0,D7           ; D7=SIZE (-4)
  520.     ADDQ.L  #4,D0           ; FIX MEM
  521.     BSR NEW
  522.     TST.L   D0
  523.     BEQ iERROR38
  524.     MOVE.L  D0,D6           ; D6=ADR
  525.     MOVE.L  DOSBASE(PC),A6      ; OPEN FILE
  526.     MOVE.L  #NAMEBUF,D1
  527.     MOVE.L  #1005,D2
  528.     JSR -30(A6)
  529.     MOVE.B  #0,(A2)
  530.     MOVE.L  D0,HANDLE
  531.     BEQ iERROR16
  532.     MOVE.L  D6,D4           ; READ DATA
  533.     MOVE.L  D7,D3
  534.     MOVE.L  D4,D2
  535.     MOVE.L  HANDLE(PC),D1
  536.     MOVE.L  DOSBASE(PC),A6
  537.     ADDQ.L  #1,D4
  538.     JSR -42(A6)
  539.     MOVE.L  D0,D4
  540.     MOVE.L  DOSBASE(PC),A6      ; CLOSE IT
  541.     MOVE.L  HANDLE(PC),D1
  542.     JSR -36(A6)
  543.     CMP.L   D4,D7
  544.     BNE iERROR16
  545.     ADD.L   D6,D4
  546.     MOVE.L  D4,ENDECODE     ; SET POINTERS
  547.     MOVE.L  D4,A0
  548.     MOVE.B  #10,(A0)+
  549.     MOVE.B  #10,(A0)+
  550.     MOVE.L  D6,D4
  551.     MOVE.L  D4,CURECODE
  552.     MOVE.L  D4,ECODE
  553.     ADDQ.L  #4,D7
  554.     MOVE.L  D6,EBUF
  555.     MOVE.L  D7,EBUFSIZE
  556.     RTS
  557. ;*-*
  558. ;; file length
  559. FILELENGTH:           ; FILENAME-->D0-->LEN
  560.     MOVEM.L D1-D2/D4/D6/D7/A6,-(A7)
  561.     MOVE.L  D0,D1
  562.     MOVEQ   #-2,D2
  563.     MOVE.L  DOSBASE(PC),A6
  564.     JSR -84(A6)
  565.     MOVE.L  D0,D7           ; LOCK
  566.     BEQ.S   .1
  567.     MOVE.L  D0,D1
  568.     MOVE.L  #-260,D4        ; FRAME WITH BCPL ADDRESS CONV.
  569.     MOVE.L  A7,D0
  570.     BTST    #1,D0
  571.     BEQ.S   .4
  572.     SUBQ.L  #2,D4
  573. .4: LEA 0(A7,D4.L),A7
  574.     MOVE.L  A7,D2
  575.     JSR -102(A6)        ; EXAMINE
  576.     MOVE.L  124(A7),D6      ; GET LENGTH FROM FIB
  577.     NEG.L   D4
  578.     LEA 0(A7,D4.L),A7
  579.     TST.L   D0
  580.     BEQ.S   .2
  581.     BSR .3
  582.     MOVE.L  D6,D0
  583.     BRA.S   .EX
  584. .3: MOVE.L  D7,D1           ; UNLOCK
  585.     JSR -90(A6)
  586.     RTS
  587. .2: BSR.S   .3
  588. .1: MOVEQ   #-1,D0
  589. .EX:    MOVEM.L (A7)+,D1-D2/D4/D6/D7/A6
  590.     RTS
  591. ;*-*
  592. ;; to front
  593. TOFRONT:
  594.     BTST    #6,CODEPREFS+3      ; -w
  595.     BEQ.S   .2
  596.     LEA INITINTUI,A1
  597.     MOVEQ   #0,D0
  598.     MOVE.L  4.W,A6
  599.     JSR -552(A6)
  600.     TST.L   D0
  601.     BEQ.S   .2
  602.     MOVE.L  D0,A6
  603.     JSR -342(A6)
  604.     MOVE.L  A6,A1
  605.     MOVE.L  4.W,A6
  606.     JSR -414(A6)
  607. .2: RTS
  608. ;*-*
  609. ;; write buffers
  610. WRITEBUFFERS:
  611.     BTST    #1,CODEPREFS+2
  612.     BNE .C
  613.     RTS
  614. .C: LEA HEAP(PC),A0
  615.     MOVE.L  8(A0),D0
  616.     ADD.L   12(A0),D0
  617.     SUB.L   (A0),D0
  618.     MOVE.L  GENERALSIZE,D1
  619.     MOVE.L  D1,12(A0)
  620.     SUB.L   D0,D1
  621.     ADD.L   8(A0),D1
  622.     MOVE.L  D1,(A0)
  623.     LEA BTAB(PC),A5
  624.     MOVEQ   #NUMBUFS-1,D5
  625. .XL:LEA .MES(PC),A0
  626.     LEA ERARGS(PC),A1
  627.     MOVE.L  (A5)+,A4
  628.     MOVE.L  (A5)+,(A1)      ; bufname
  629.     MOVE.L  (A4),D0
  630.     SUB.L   8(A4),D0
  631.     MOVE.L  D0,4(A1)        ; used
  632.     MOVE.L  12(A4),D1
  633.     MOVE.L  D1,12(A1)       ; maxbuf
  634.     LSR.L   #8,D0
  635.     LSR.L   #8,D1
  636.     MULU    #100,D0
  637.     DIVU    D1,D0
  638.     AND.L   #$FFFF,D0
  639.     ADDQ.L  #1,D0
  640.     MOVE.L  D0,8(A1)        ; percentage
  641.     MOVE.L  (A5)+,D0
  642.     LSL.L   #2,D0
  643.     MOVE.L  .T(PC,D0.L),16(A1)  ; MAX/DYN/EXP
  644.     BSR WRITEFORMAT
  645.     DBRA    D5,.XL
  646.     RTS
  647. .MES:   DC.B    '%s buffer used %ld (%ld%%) of %ld (%s).',10,0
  648.     EVEN
  649. .T: DC.L    .1,.2,.3
  650. .1: DC.B    'fixed',0
  651. .2: DC.B    'reallocatable',0
  652. .3: DC.B    'expandable',0
  653.     EVEN
  654. ;*-*
  655. ;; clear hash table
  656. CLEARHASHTAB:
  657.     CLR.L   ConstsList
  658.     CLR.L   ConstTemp
  659.     LEA     LIBHASH,A1
  660.     MOVE.L  #255,D0
  661. .1:
  662.     CLR.L   (A1)+
  663.     DBRA    D0,.1
  664.     RTS
  665. ;*-*
  666. ;*-*
  667.  
  668.